230405 Sentiment Platform

Background

Aave

Aave 允许用户借贷约 20 种加密货币。Aave 最突出的产品之一是“闪贷”,这是 DeFi 行业的首个无担保贷款解决方案。然而,无担保贷款的能力需要权衡:闪贷必须在相同的金融操作中偿还,这意味着它们只发行几分钟甚至几秒钟。不过,闪贷在套利、抵押品闪兑或债务交换方面还是有用的。

price=i=0nbalances[i]×weights[i]totalSupply

Vulnerabilities

主要问题在于 balancer pools 存在一个 view-only reentrancy bug。由于 view 类型的调用并不受保护,导致攻击者可以在受害者更新 pool balance 前执行恶意合约,造成「虚高定价 overpriced」,通过赎回抵押品谋取利益。

Attack Process

Tip

主要使用了 Phalcon 和 MetaSleuth 进行攻击交易的追踪

Pasted image 20231012144439.png

  1. Receiver 调用 Aave 协议进行闪电贷款
    • 同时代理合约 Proxy_62c5_6403 通过存款获得一定数额的 B-33 Token
  2. Receiver 将贷来的 606 WBTC、10000 WETH、18000000 USDC.e 存入 Balancer,并获得相应的 B-33-WETH-33-WBTC-33-USDC 代币(简称为 B33 Token)

Pasted image 20231012174115.png
Pasted image 20231017120751.png

  1. Receiver 执行 Balancer 的 exitPool 操作

    • 由于 Balancer 自身实现的缺陷,它会先将 B-33 Token 摧毁,并将钱款退回给 Receiver,此时 Balancer 的 totalSupply 回到了攻击者存款前的数量,但是 balances 仍未被更新,则此时 LP 代币的价格 price 是虚高的
    • 在向 Receiver 转账 ETH 时,触发 Receiver 构造好的 fallback 函数
      • Proxy_62c5_6403 使用之前获得的 LP 代币(即 B-33 Token),向 Sentiment 的资金池兑换虚拟货币,因为价格 price 虚高,所以可以获得超额虚拟货币
      • 获得 USDC.e、USDT、WETH,并将 FRAX 转化为 USDC.e
      • 将获得的所有虚拟货币由 Proxy_62c5_6403 转至 Receiver 的账户
  2. Balancer 更新 balances 的数据,使之回归真实数据(但为时已晚)

  3. Receiver 归还闪电贷款,剩下的虚拟货币均为攻击收益

References